package com.vcoud.mundialbrasil2014;

import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.Locale;
import java.util.TimeZone;

import org.apache.http.NameValuePair;
import org.apache.http.message.BasicNameValuePair;
import org.json.JSONArray;
import org.json.JSONException;

import android.app.Activity;
import android.database.Cursor;
import android.os.AsyncTask;
import android.util.Log;
import android.widget.Toast;

import com.vcoud.mbrasil2014.R;

public class ActualizacionService {

	Activity activity;

	// URL Desarrollo
	// public static final String URL =
	// "http://10.0.2.2/vcoud/mundial/consultadb_v4.php";

	// URL Produccion
	public static final String URL = "http://www.vcoud.com/mundial/consultadb_v5.php";

	public ActualizacionService(Activity activity) {
		this.activity = activity;
	}

	public void actualizacionSegundoPlano() {
		ActualizarSegundoPlano refresh = new ActualizarSegundoPlano();
		refresh.execute();
	}

	public void actualizacionDeInicio() {
		try {

			HashMap<String, Boolean> validacion = new HashMap<String, Boolean>();

			Log.v("Sync", "Iniciando sincronizacion de inicio");
			ArrayList<NameValuePair> mParamActualizar = new ArrayList<NameValuePair>();
			ArrayList<NameValuePair> mParamEquipo = new ArrayList<NameValuePair>();
			ArrayList<NameValuePair> mParamSede = new ArrayList<NameValuePair>();
			ArrayList<NameValuePair> mParamEtapaMundial = new ArrayList<NameValuePair>();
			ArrayList<NameValuePair> mParamJugador = new ArrayList<NameValuePair>();
			ArrayList<NameValuePair> mParamPartido = new ArrayList<NameValuePair>();
			ArrayList<NameValuePair> mParamGol = new ArrayList<NameValuePair>();
			DB db = new DB(activity);
			db.abrirConEscritura();
			mParamActualizar.add(new BasicNameValuePair("tc", "actualizar"));
			mParamEquipo.add(new BasicNameValuePair("tc", "equipo"));
			mParamSede.add(new BasicNameValuePair("tc", "sede"));
			mParamEtapaMundial
					.add(new BasicNameValuePair("tc", "etapamundial"));
			mParamJugador.add(new BasicNameValuePair("tc", "jugador"));
			mParamPartido.add(new BasicNameValuePair("tc", "partido"));
			mParamGol.add(new BasicNameValuePair("tc", "gol"));
			String mRespuestaActualizar = null;
			String mRespuestaEquipo = null;
			String mRespuestaSede = null;
			String mRespuestaEtapaMundial = null;
			String mRespuestaJugador = null;
			String mRespuestaPartido = null;
			String mRespuestaGol = null;
			JSONArray mResultadoActualizar = null;
			JSONArray mResultadoPartido = null;
			JSONArray mResultadoGol = null;
			JSONArray mResultadoEquipo = null;
			JSONArray mResultadoSede = null;
			JSONArray mResultadoEtapaMundial = null;
			JSONArray mResultadoJugador = null;

			/** Validación de que hay que actualizar **/

			try {
				Log.v("Sync", "Sincronizando actualizar...");
				mRespuestaActualizar = ClienteHttp.ejecutarHttpPost(URL,
						mParamActualizar);
				mResultadoActualizar = new JSONArray(mRespuestaActualizar);
				for (int i = 0; i < mResultadoActualizar.length(); i++) {
					Cursor c = db.obtenerActualizacion(mResultadoActualizar
							.getJSONObject(i).getInt("IDActualizar"));
					int remoteVersion = mResultadoActualizar.getJSONObject(i)
							.getInt("Version");
					int localVersion = c.getInt(2);
					if (remoteVersion != localVersion) {
						validacion.put(mResultadoActualizar.getJSONObject(i)
								.getString("Tabla"), true);
					} else {
						validacion.put(mResultadoActualizar.getJSONObject(i)
								.getString("Tabla"), false);
					}
					db.insertarActualizacion(
							mResultadoActualizar.getJSONObject(i).getInt(
									"IDActualizar"),
							mResultadoActualizar.getJSONObject(i).getString(
									"Tabla"), mResultadoActualizar
									.getJSONObject(i).getInt("Version"));
					c.close();
				}
			} catch (JSONException e) {
				e.printStackTrace();
			}

			/** Sincronizacion de equipo **/
			if (validacion.get("Equipo")) {
				try {
					Log.v("Sync", "Sincronizando equipo...");
					mRespuestaEquipo = ClienteHttp.ejecutarHttpPost(URL,
							mParamEquipo);
					mResultadoEquipo = new JSONArray(mRespuestaEquipo);
					for (int i = 0; i < mResultadoEquipo.length(); i++) {
						// adding each child node to HashMap key => value

						db.insertarEquipo(
								mResultadoEquipo.getJSONObject(i).getInt(
										"IDEquipo"),
								mResultadoEquipo.getJSONObject(i).getString(
										"Nombre"),
								mResultadoEquipo.getJSONObject(i).getString(
										"Bandera"),
								mResultadoEquipo.getJSONObject(i).getString(
										"Escudo"),
								mResultadoEquipo.getJSONObject(i).getString(
										"Grupo"),
								mResultadoEquipo.getJSONObject(i).getString(
										"Descripcion"),
								mResultadoEquipo.getJSONObject(i).getInt(
										"Activo"),
								mResultadoEquipo.getJSONObject(i).getString(
										"Color"),
								mResultadoEquipo.getJSONObject(i).getInt(
										"Ganados"),
								mResultadoEquipo.getJSONObject(i).getInt(
										"Empatados"),
								mResultadoEquipo.getJSONObject(i).getInt(
										"Perdidos"),
								mResultadoEquipo.getJSONObject(i).getString(
										"Camisa"),
								mResultadoEquipo.getJSONObject(i).getInt(
										"Puntos"),
								mResultadoEquipo.getJSONObject(i).getInt(
										"GolesFavor"),
								mResultadoEquipo.getJSONObject(i).getInt(
										"GolesContra"),
								mResultadoEquipo.getJSONObject(i).getInt(
										"DiferenciaGoles"));

					}
				} catch (JSONException e) {
					Log.e("Sync", "Error al sincronizar equipo.");
					e.printStackTrace();
				}
			}

			/** Sincronizacion de sede **/
			if (validacion.get("Sede")) {
				try {
					Log.v("Sync", "Sincronizando sede...");
					mRespuestaSede = ClienteHttp.ejecutarHttpPost(URL,
							mParamSede);
					mResultadoSede = new JSONArray(mRespuestaSede);

					for (int i = 0; i < mResultadoSede.length(); i++) {

						db.insertarSede(
								mResultadoSede.getJSONObject(i)
										.getInt("IDSede"),
								mResultadoSede.getJSONObject(i).getString(
										"Nombre"),
								mResultadoSede.getJSONObject(i).getString(
										"NombreEstado"),
								mResultadoSede.getJSONObject(i).getString(
										"Imagen"),
								mResultadoSede.getJSONObject(i).getString(
										"Descripcion"));
					}
				} catch (JSONException e) {
					Log.e("Sync", "Error al sincronizar sede.");
					e.printStackTrace();
				}
			} else {
				Log.v("Sync", "No es necesaria la sincronización de Sede");
			}

			/** Sincronizacion de etapa mundial **/
			if (validacion.get("EtapaMundial")) {
				try {
					Log.v("Sync", "Sincronizando etapa mundial...");
					mRespuestaEtapaMundial = ClienteHttp.ejecutarHttpPost(URL,
							mParamEtapaMundial);
					mResultadoEtapaMundial = new JSONArray(
							mRespuestaEtapaMundial);

					for (int i = 0; i < mResultadoEtapaMundial.length(); i++) {

						db.insertarEtapaMundial(mResultadoEtapaMundial
								.getJSONObject(i).getInt("IDEtapaMundial"),
								mResultadoEtapaMundial.getJSONObject(i)
										.getString("Nombre"));

					}
				} catch (JSONException e) {
					Log.e("Sync", "Error al sincronizar etapa mundial.");
					e.printStackTrace();
				}
			} else {
				Log.v("Sync",
						"No es necesaria la sincronización de EtapaMundial");
			}

			/** Sincronizacion de jugadores **/
			if (validacion.get("Jugador")) {
				try {
					Log.v("Sync", "Sincronizando jugador...");
					mRespuestaJugador = ClienteHttp.ejecutarHttpPost(URL,
							mParamJugador);
					mResultadoJugador = new JSONArray(mRespuestaJugador);

					for (int i = 0; i < mResultadoJugador.length(); i++) {

						db.insertarJugador(
								mResultadoJugador.getJSONObject(i).getInt(
										"IDJugador"),
								mResultadoJugador.getJSONObject(i).getString(
										"Nombre"),
								mResultadoJugador.getJSONObject(i).getString(
										"Apellido"),
								mResultadoJugador.getJSONObject(i).getString(
										"Descripcion"),
								mResultadoJugador.getJSONObject(i).getString(
										"Club"),
								mResultadoJugador.getJSONObject(i).getInt(
										"Numero"),
								mResultadoJugador.getJSONObject(i).getString(
										"Posicion"),
								mResultadoJugador.getJSONObject(i).getString(
										"Foto"),
								mResultadoJugador.getJSONObject(i).getInt(
										"FK_Equipo"),
								mResultadoJugador.getJSONObject(i)
										.getInt("Gol"),
								mResultadoJugador.getJSONObject(i).getInt(
										"Asistencia"),
								mResultadoJugador.getJSONObject(i).getInt(
										"TarjetaAmarilla"),
								mResultadoJugador.getJSONObject(i).getInt(
										"TarjetaRoja"),
								mResultadoJugador.getJSONObject(i).getInt(
										"Capitan"),
								mResultadoJugador.getJSONObject(i).getInt(
										"Lesionado"));

					}
				} catch (JSONException e) {
					Log.e("Sync", "Error al sincronizar jugador.");
					e.printStackTrace();
				}
			} else {
				Log.v("Sync", "No es necesaria la sincronización de Jugadores");
			}

			/** Sincronizacion de partido **/

			try {
				Log.v("Sync", "Sincronizando partido...");
				mRespuestaPartido = ClienteHttp.ejecutarHttpPost(URL,
						mParamPartido);
				mResultadoPartido = new JSONArray(mRespuestaPartido);

				for (int i = 0; i < mResultadoPartido.length(); i++) {
					String mRawFecha = mResultadoPartido.getJSONObject(i)
							.getString("Fecha");
					SimpleDateFormat formatoInicial = new SimpleDateFormat(
							"yyyy-MM-dd HH:mm:ss", Locale.US);
					formatoInicial.setTimeZone(TimeZone
							.getTimeZone("America/Caracas"));
					Date mFecha = formatoInicial.parse(mRawFecha);
					TimeZone tzUsuario = TimeZone.getDefault();
					SimpleDateFormat formatoFinal = new SimpleDateFormat(
							"yyyy-MM-dd HH:mm:ss", Locale.US);
					formatoFinal.setTimeZone(tzUsuario);
					String mFechaConvertida = formatoFinal.format(mFecha);
					db.insertarPartido(
							mResultadoPartido.getJSONObject(i).getInt(
									"IDPartido"),
							mResultadoPartido.getJSONObject(i).getInt(
									"FK_EquipoLocal"),
							mResultadoPartido.getJSONObject(i).getInt(
									"FK_EquipoVisitante"),
							mResultadoPartido.getJSONObject(i)
									.getInt("FK_Sede"),
							mFechaConvertida,
							mResultadoPartido.getJSONObject(i).getString(
									"NombreArbitro"),
							mResultadoPartido.getJSONObject(i).getInt(
									"GolLocal"),
							mResultadoPartido.getJSONObject(i).getInt(
									"GolVisitante"),
							mResultadoPartido.getJSONObject(i).getInt(
									"GolLocalTiempoExtra"),
							mResultadoPartido.getJSONObject(i).getInt(
									"GolVisitanteTiempoExtra"),
							mResultadoPartido.getJSONObject(i).getInt(
									"GolLocalPenal"),
							mResultadoPartido.getJSONObject(i).getInt(
									"GolVisitantePenal"), mResultadoPartido
									.getJSONObject(i).getInt("FK_EtapaMundial"));
				}
			} catch (JSONException e) {
				Log.e("Sync", "Error al sincronizar partido.");
				e.printStackTrace();
			}

			/** Sincronizacion de gol **/

			try {
				Log.v("Sync", "Sincronizando gol...");
				mRespuestaGol = ClienteHttp.ejecutarHttpPost(URL, mParamGol);
				mResultadoGol = new JSONArray(mRespuestaGol);

				for (int i = 0; i < mResultadoGol.length(); i++) {

					db.insertarGol(
							mResultadoGol.getJSONObject(i).getInt("IDGol"),
							mResultadoGol.getJSONObject(i).getInt("FK_Jugador"),
							mResultadoGol.getJSONObject(i).getInt("FK_Partido"),
							mResultadoGol.getJSONObject(i).getInt("Minuto"),
							mResultadoGol.getJSONObject(i).getInt("AutoGol"),
							mResultadoGol.getJSONObject(i).getString(
									"RutaVideo"), mResultadoGol
									.getJSONObject(i).getInt("FK_Equipo"));

				}

			} catch (JSONException e) {
				Log.e("Sync", "Error al sincronizar gol.");
				e.printStackTrace();
			}

			db.cerrar();
			Log.v("Sync", "Sincronizacion terminada");
		} catch (Exception e) {
			e.printStackTrace();
			Log.w("Sync", "Hubieron errores en la sincronizacion");
		}
	}

	public Boolean actualizarCompleto() {
		DB db = new DB(activity);
		db.abrirConEscritura();
		try {
			Log.v("Sync", "Iniciando sincronizacion completa");
			ArrayList<NameValuePair> mParamActualizar = new ArrayList<NameValuePair>();
			ArrayList<NameValuePair> mParamEquipo = new ArrayList<NameValuePair>();
			ArrayList<NameValuePair> mParamSede = new ArrayList<NameValuePair>();
			ArrayList<NameValuePair> mParamEtapaMundial = new ArrayList<NameValuePair>();
			ArrayList<NameValuePair> mParamJugador = new ArrayList<NameValuePair>();
			ArrayList<NameValuePair> mParamPartido = new ArrayList<NameValuePair>();
			ArrayList<NameValuePair> mParamGol = new ArrayList<NameValuePair>();

			mParamActualizar.add(new BasicNameValuePair("tc", "actualizar"));
			mParamEquipo.add(new BasicNameValuePair("tc", "equipo"));
			mParamSede.add(new BasicNameValuePair("tc", "sede"));
			mParamEtapaMundial
					.add(new BasicNameValuePair("tc", "etapamundial"));
			mParamJugador.add(new BasicNameValuePair("tc", "jugador"));
			mParamPartido.add(new BasicNameValuePair("tc", "partido"));
			mParamGol.add(new BasicNameValuePair("tc", "gol"));
			String mRespuestaActualizar = null;
			String mRespuestaEquipo = null;
			String mRespuestaSede = null;
			String mRespuestaEtapaMundial = null;
			String mRespuestaJugador = null;
			String mRespuestaPartido = null;
			String mRespuestaGol = null;
			JSONArray mResultadoActualizar = null;
			JSONArray mResultadoPartido = null;
			JSONArray mResultadoGol = null;
			JSONArray mResultadoEquipo = null;
			JSONArray mResultadoSede = null;
			JSONArray mResultadoEtapaMundial = null;
			JSONArray mResultadoJugador = null;

			/** Sincronización de actualizar **/

			try {
				Log.v("Sync", "Sincronizando actualizar...");
				mRespuestaActualizar = ClienteHttp.ejecutarHttpPost(URL,
						mParamActualizar);
				mResultadoActualizar = new JSONArray(mRespuestaActualizar);
				for (int i = 0; i < mResultadoActualizar.length(); i++) {
					db.insertarActualizacion(
							mResultadoActualizar.getJSONObject(i).getInt(
									"IDActualizar"),
							mResultadoActualizar.getJSONObject(i).getString(
									"Tabla"), mResultadoActualizar
									.getJSONObject(i).getInt("Version"));
				}
			} catch (JSONException e) {
				e.printStackTrace();
			}
			/** Sincronizacion de equipo **/

			try {
				Log.v("Sync", "Sincronizando equipo...");
				mRespuestaEquipo = ClienteHttp.ejecutarHttpPost(URL,
						mParamEquipo);
				mResultadoEquipo = new JSONArray(mRespuestaEquipo);
				for (int i = 0; i < mResultadoEquipo.length(); i++) {
					// adding each child node to HashMap key => value

					db.insertarEquipo(
							mResultadoEquipo.getJSONObject(i)
									.getInt("IDEquipo"),
							mResultadoEquipo.getJSONObject(i).getString(
									"Nombre"),
							mResultadoEquipo.getJSONObject(i).getString(
									"Bandera"),
							mResultadoEquipo.getJSONObject(i).getString(
									"Escudo"),
							mResultadoEquipo.getJSONObject(i)
									.getString("Grupo"),
							mResultadoEquipo.getJSONObject(i).getString(
									"Descripcion"),
							mResultadoEquipo.getJSONObject(i).getInt("Activo"),
							mResultadoEquipo.getJSONObject(i)
									.getString("Color"),
							mResultadoEquipo.getJSONObject(i).getInt("Ganados"),
							mResultadoEquipo.getJSONObject(i).getInt(
									"Empatados"),
							mResultadoEquipo.getJSONObject(i)
									.getInt("Perdidos"),
							mResultadoEquipo.getJSONObject(i).getString(
									"Camisa"),
							mResultadoEquipo.getJSONObject(i).getInt("Puntos"),
							mResultadoEquipo.getJSONObject(i).getInt(
									"GolesFavor"),
							mResultadoEquipo.getJSONObject(i).getInt(
									"GolesContra"),
							mResultadoEquipo.getJSONObject(i).getInt(
									"DiferenciaGoles"));

				}
			} catch (JSONException e) {
				Log.e("Sync", "Error al sincronizar equipo.");
				e.printStackTrace();
			}
			/** Sincronizacion de sede **/

			try {
				Log.v("Sync", "Sincronizando sede...");
				mRespuestaSede = ClienteHttp.ejecutarHttpPost(URL, mParamSede);
				mResultadoSede = new JSONArray(mRespuestaSede);

				for (int i = 0; i < mResultadoSede.length(); i++) {

					db.insertarSede(
							mResultadoSede.getJSONObject(i).getInt("IDSede"),
							mResultadoSede.getJSONObject(i).getString("Nombre"),
							mResultadoSede.getJSONObject(i).getString(
									"NombreEstado"),
							mResultadoSede.getJSONObject(i).getString("Imagen"),
							mResultadoSede.getJSONObject(i).getString(
									"Descripcion"));
				}
			} catch (JSONException e) {
				Log.e("Sync", "Error al sincronizar sede.");
				e.printStackTrace();
			}
			/** Sincronizacion de etapa mundial **/

			try {
				Log.v("Sync", "Sincronizando etapa mundial...");
				mRespuestaEtapaMundial = ClienteHttp.ejecutarHttpPost(URL,
						mParamEtapaMundial);
				mResultadoEtapaMundial = new JSONArray(mRespuestaEtapaMundial);

				for (int i = 0; i < mResultadoEtapaMundial.length(); i++) {

					db.insertarEtapaMundial(
							mResultadoEtapaMundial.getJSONObject(i).getInt(
									"IDEtapaMundial"),
							mResultadoEtapaMundial.getJSONObject(i).getString(
									"Nombre"));

				}
			} catch (JSONException e) {
				Log.e("Sync", "Error al sincronizar etapa mundial.");
				e.printStackTrace();
			}
			/** Sincronizacion de jugadores **/

			try {
				Log.v("Sync", "Sincronizando jugador...");
				mRespuestaJugador = ClienteHttp.ejecutarHttpPost(URL,
						mParamJugador);
				mResultadoJugador = new JSONArray(mRespuestaJugador);
				for (int i = 0; i < mResultadoJugador.length(); i++) {

					db.insertarJugador(
							mResultadoJugador.getJSONObject(i).getInt(
									"IDJugador"),
							mResultadoJugador.getJSONObject(i).getString(
									"Nombre"),
							mResultadoJugador.getJSONObject(i).getString(
									"Apellido"),
							mResultadoJugador.getJSONObject(i).getString(
									"Descripcion"),
							mResultadoJugador.getJSONObject(i)
									.getString("Club"),
							mResultadoJugador.getJSONObject(i).getInt("Numero"),
							mResultadoJugador.getJSONObject(i).getString(
									"Posicion"),
							mResultadoJugador.getJSONObject(i)
									.getString("Foto"),
							mResultadoJugador.getJSONObject(i).getInt(
									"FK_Equipo"),
							mResultadoJugador.getJSONObject(i).getInt("Gol"),
							mResultadoJugador.getJSONObject(i).getInt(
									"Asistencia"),
							mResultadoJugador.getJSONObject(i).getInt(
									"TarjetaAmarilla"), mResultadoJugador
									.getJSONObject(i).getInt("TarjetaRoja"),
							mResultadoJugador.getJSONObject(i)
									.getInt("Capitan"), mResultadoJugador
									.getJSONObject(i).getInt("Lesionado"));

				}
			} catch (JSONException e) {
				Log.e("Sync", "Error al sincronizar jugador.");
				e.printStackTrace();
			}
			/** Sincronizacion de partido **/

			try {
				Log.v("Sync", "Sincronizando partido...");
				mRespuestaPartido = ClienteHttp.ejecutarHttpPost(URL,
						mParamPartido);
				mResultadoPartido = new JSONArray(mRespuestaPartido);

				for (int i = 0; i < mResultadoPartido.length(); i++) {
					String mRawFecha = mResultadoPartido.getJSONObject(i)
							.getString("Fecha");
					SimpleDateFormat formatoInicial = new SimpleDateFormat(
							"yyyy-MM-dd HH:mm:ss", Locale.US);
					formatoInicial.setTimeZone(TimeZone
							.getTimeZone("America/Caracas"));
					Date mFecha = formatoInicial.parse(mRawFecha);
					TimeZone tzUsuario = TimeZone.getDefault();
					SimpleDateFormat formatoFinal = new SimpleDateFormat(
							"yyyy-MM-dd HH:mm:ss", Locale.US);
					formatoFinal.setTimeZone(tzUsuario);
					String mFechaConvertida = formatoFinal.format(mFecha);
					db.insertarPartido(
							mResultadoPartido.getJSONObject(i).getInt(
									"IDPartido"),
							mResultadoPartido.getJSONObject(i).getInt(
									"FK_EquipoLocal"),
							mResultadoPartido.getJSONObject(i).getInt(
									"FK_EquipoVisitante"),
							mResultadoPartido.getJSONObject(i)
									.getInt("FK_Sede"),
							mFechaConvertida,
							mResultadoPartido.getJSONObject(i).getString(
									"NombreArbitro"),
							mResultadoPartido.getJSONObject(i).getInt(
									"GolLocal"),
							mResultadoPartido.getJSONObject(i).getInt(
									"GolVisitante"),
							mResultadoPartido.getJSONObject(i).getInt(
									"GolLocalTiempoExtra"),
							mResultadoPartido.getJSONObject(i).getInt(
									"GolVisitanteTiempoExtra"),
							mResultadoPartido.getJSONObject(i).getInt(
									"GolLocalPenal"),
							mResultadoPartido.getJSONObject(i).getInt(
									"GolVisitantePenal"), mResultadoPartido
									.getJSONObject(i).getInt("FK_EtapaMundial"));
				}
			} catch (JSONException e) {
				Log.e("Sync", "Error al sincronizar partido.");
				e.printStackTrace();
			}
			/** Sincronizacion de gol **/

			try {
				Log.v("Sync", "Sincronizando gol...");
				mRespuestaGol = ClienteHttp.ejecutarHttpPost(URL, mParamGol);
				mResultadoGol = new JSONArray(mRespuestaGol);

				for (int i = 0; i < mResultadoGol.length(); i++) {

					db.insertarGol(
							mResultadoGol.getJSONObject(i).getInt("IDGol"),
							mResultadoGol.getJSONObject(i).getInt("FK_Jugador"),
							mResultadoGol.getJSONObject(i).getInt("FK_Partido"),
							mResultadoGol.getJSONObject(i).getInt("Minuto"),
							mResultadoGol.getJSONObject(i).getInt("AutoGol"),
							mResultadoGol.getJSONObject(i).getString(
									"RutaVideo"), mResultadoGol
									.getJSONObject(i).getInt("FK_Equipo"));

				}

			} catch (JSONException e) {
				Log.e("Sync", "Error al sincronizar gol.");
				e.printStackTrace();
			}

			db.cerrar();
			Log.v("Sync", "Sincronizacion terminada");
			return true;
		} catch (Exception e) {
			e.printStackTrace();
			Log.w("Sync", "Hubieron errores en la sincronizacion");
			db.cerrar();
			return false;
		}
	}

	public Boolean actualizar() {
		/* Actualizacion */
		DB db = new DB(activity);
		db.abrirConEscritura();
		try {
			ArrayList<NameValuePair> mParamPartido = new ArrayList<NameValuePair>();
			ArrayList<NameValuePair> mParamGol = new ArrayList<NameValuePair>();
			mParamPartido.add(new BasicNameValuePair("tc", "partido"));
			mParamGol.add(new BasicNameValuePair("tc", "gol"));
			String mRespuestaPartido = null;
			String mRespuestaGol = null;
			JSONArray mResultadoPartido = null;
			JSONArray mResultadoGol = null;

			/** Sincronizacion de partido **/
			try {
				Log.v("Sync", "Sincronizando partido...");
				mRespuestaPartido = ClienteHttp.ejecutarHttpPost(URL,
						mParamPartido);
				mResultadoPartido = new JSONArray(mRespuestaPartido);
				for (int i = 0; i < mResultadoPartido.length(); i++) {
					String mRawFecha = mResultadoPartido.getJSONObject(i)
							.getString("Fecha");
					SimpleDateFormat formatoInicial = new SimpleDateFormat(
							"yyyy-MM-dd HH:mm:ss", Locale.US);
					formatoInicial.setTimeZone(TimeZone
							.getTimeZone("America/Caracas"));
					Date mFecha = formatoInicial.parse(mRawFecha);
					TimeZone tzUsuario = TimeZone.getDefault();
					SimpleDateFormat formatoFinal = new SimpleDateFormat(
							"yyyy-MM-dd HH:mm:ss", Locale.US);
					formatoFinal.setTimeZone(tzUsuario);
					String mFechaConvertida = formatoFinal.format(mFecha);
					db.insertarPartido(
							mResultadoPartido.getJSONObject(i).getInt(
									"IDPartido"),
							mResultadoPartido.getJSONObject(i).getInt(
									"FK_EquipoLocal"),
							mResultadoPartido.getJSONObject(i).getInt(
									"FK_EquipoVisitante"),
							mResultadoPartido.getJSONObject(i)
									.getInt("FK_Sede"),
							mFechaConvertida,
							mResultadoPartido.getJSONObject(i).getString(
									"NombreArbitro"),
							mResultadoPartido.getJSONObject(i).getInt(
									"GolLocal"),
							mResultadoPartido.getJSONObject(i).getInt(
									"GolVisitante"),
							mResultadoPartido.getJSONObject(i).getInt(
									"GolLocalTiempoExtra"),
							mResultadoPartido.getJSONObject(i).getInt(
									"GolVisitanteTiempoExtra"),
							mResultadoPartido.getJSONObject(i).getInt(
									"GolLocalPenal"),
							mResultadoPartido.getJSONObject(i).getInt(
									"GolVisitantePenal"), mResultadoPartido
									.getJSONObject(i).getInt("FK_EtapaMundial"));
				}
			} catch (JSONException e) {
				Log.e("Sync", "Error al sincronizar partido.");
				e.printStackTrace();
			}

			/** Sincronizacion de gol **/

			try {
				Log.v("Sync", "Sincronizando gol...");
				mRespuestaGol = ClienteHttp.ejecutarHttpPost(URL, mParamGol);
				mResultadoGol = new JSONArray(mRespuestaGol);
				for (int i = 0; i < mResultadoGol.length(); i++) {
					db.insertarGol(
							mResultadoGol.getJSONObject(i).getInt("IDGol"),
							mResultadoGol.getJSONObject(i).getInt("FK_Jugador"),
							mResultadoGol.getJSONObject(i).getInt("FK_Partido"),
							mResultadoGol.getJSONObject(i).getInt("Minuto"),
							mResultadoGol.getJSONObject(i).getInt("AutoGol"),
							mResultadoGol.getJSONObject(i).getString(
									"RutaVideo"), mResultadoGol
									.getJSONObject(i).getInt("FK_Equipo"));

				}

			} catch (JSONException e) {
				Log.e("Sync", "Error al sincronizar gol.");
				e.printStackTrace();
			}

			db.cerrar();
			Log.v("Sync", "Sincronizacion terminada");
			return true;
		} catch (Exception e) {
			e.printStackTrace();
			Log.w("Sync", "Hubieron errores en la sincronizacion");
			db.cerrar();
			return false;
		}
	}

	public Boolean actualizarGol() {
		/** Sincronizacion de gol **/
		ArrayList<NameValuePair> mParamGol = new ArrayList<NameValuePair>();
		mParamGol.add(new BasicNameValuePair("tc", "gol"));
		String mRespuestaGol = null;
		JSONArray mResultadoGol = null;
		DB db = new DB(activity);
		db.abrirConEscritura();
		try {
			Log.v("Sync", "Sincronizando gol...");
			mRespuestaGol = ClienteHttp.ejecutarHttpPost(URL, mParamGol);
			mResultadoGol = new JSONArray(mRespuestaGol);

			for (int i = 0; i < mResultadoGol.length(); i++) {

				db.insertarGol(mResultadoGol.getJSONObject(i).getInt("IDGol"),
						mResultadoGol.getJSONObject(i).getInt("FK_Jugador"),
						mResultadoGol.getJSONObject(i).getInt("FK_Partido"),
						mResultadoGol.getJSONObject(i).getInt("Minuto"),
						mResultadoGol.getJSONObject(i).getInt("AutoGol"),
						mResultadoGol.getJSONObject(i).getString("RutaVideo"),
						mResultadoGol.getJSONObject(i).getInt("FK_Equipo"));

			}
			db.cerrar();
			Log.v("Sync", "Sincronizacion de gol completa");
			return true;
		} catch (JSONException e) {
			Log.e("Sync", "Error al sincronizar gol.");
			e.printStackTrace();
			db.cerrar();
			return false;
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
			db.cerrar();
			return false;
		}
	}

	public Boolean actualizarGolPorPartido(long IDPartido) {
		/** Sincronizacion de gol por partido **/
		ArrayList<NameValuePair> mParamGol = new ArrayList<NameValuePair>();
		mParamGol.add(new BasicNameValuePair("tc", "gol"));
		mParamGol.add(new BasicNameValuePair("id", String.valueOf(IDPartido)));
		String mRespuestaGol = null;
		JSONArray mResultadoGol = null;
		DB db = new DB(activity);
		db.abrirConEscritura();
		try {
			Log.v("Sync", "Sincronizando gol por partido...");
			mRespuestaGol = ClienteHttp.ejecutarHttpPost(URL, mParamGol);
			mResultadoGol = new JSONArray(mRespuestaGol);

			for (int i = 0; i < mResultadoGol.length(); i++) {

				db.insertarGol(mResultadoGol.getJSONObject(i).getInt("IDGol"),
						mResultadoGol.getJSONObject(i).getInt("FK_Jugador"),
						mResultadoGol.getJSONObject(i).getInt("FK_Partido"),
						mResultadoGol.getJSONObject(i).getInt("Minuto"),
						mResultadoGol.getJSONObject(i).getInt("AutoGol"),
						mResultadoGol.getJSONObject(i).getString("RutaVideo"),
						mResultadoGol.getJSONObject(i).getInt("FK_Equipo"));

			}

			Log.v("Sync", "Sincronizacion de gol por partido completa");
			db.cerrar();
			return true;
		} catch (JSONException e) {
			Log.e("Sync", "Error al sincronizar gol por partido.");
			e.printStackTrace();
			db.cerrar();
			return false;
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
			db.cerrar();
			return false;
		}

	}

	public Boolean actualizarPartidosHoy() {
		ArrayList<NameValuePair> mParamPartido = new ArrayList<NameValuePair>();
		mParamPartido.add(new BasicNameValuePair("tc", "partidoshoy"));
		String mRespuestaPartido = null;
		JSONArray mResultadoPartido = null;
		DB db = new DB(activity);
		db.abrirConEscritura();

		/** Sincronizacion de partido **/
		try {
			Log.v("Sync", "Sincronizando partidos de hoy...");
			mRespuestaPartido = ClienteHttp
					.ejecutarHttpPost(URL, mParamPartido);
			mResultadoPartido = new JSONArray(mRespuestaPartido);
			for (int i = 0; i < mResultadoPartido.length(); i++) {
				String mRawFecha = mResultadoPartido.getJSONObject(i)
						.getString("Fecha");
				SimpleDateFormat formatoInicial = new SimpleDateFormat(
						"yyyy-MM-dd HH:mm:ss", Locale.US);
				formatoInicial.setTimeZone(TimeZone
						.getTimeZone("America/Caracas"));
				Date mFecha = formatoInicial.parse(mRawFecha);
				TimeZone tzUsuario = TimeZone.getDefault();
				SimpleDateFormat formatoFinal = new SimpleDateFormat(
						"yyyy-MM-dd HH:mm:ss", Locale.US);
				formatoFinal.setTimeZone(tzUsuario);
				String mFechaConvertida = formatoFinal.format(mFecha);
				db.insertarPartido(
						mResultadoPartido.getJSONObject(i).getInt("IDPartido"),
						mResultadoPartido.getJSONObject(i).getInt(
								"FK_EquipoLocal"),
						mResultadoPartido.getJSONObject(i).getInt(
								"FK_EquipoVisitante"),
						mResultadoPartido.getJSONObject(i).getInt("FK_Sede"),
						mFechaConvertida,
						mResultadoPartido.getJSONObject(i).getString(
								"NombreArbitro"),
						mResultadoPartido.getJSONObject(i).getInt("GolLocal"),
						mResultadoPartido.getJSONObject(i).getInt(
								"GolVisitante"),
						mResultadoPartido.getJSONObject(i).getInt(
								"GolLocalTiempoExtra"),
						mResultadoPartido.getJSONObject(i).getInt(
								"GolVisitanteTiempoExtra"),
						mResultadoPartido.getJSONObject(i).getInt(
								"GolLocalPenal"),
						mResultadoPartido.getJSONObject(i).getInt(
								"GolVisitantePenal"), mResultadoPartido
								.getJSONObject(i).getInt("FK_EtapaMundial"));
			}
			db.cerrar();
			return true;
		} catch (JSONException e) {
			Log.e("Sync", "Error al sincronizar partidos de hoy.");
			e.printStackTrace();
			db.cerrar();
			return false;
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
			db.cerrar();
			return false;
		}
	}

	public Boolean actualizarPartidosPorEtapa(int etapa) {
		ArrayList<NameValuePair> mParamPartido = new ArrayList<NameValuePair>();
		mParamPartido.add(new BasicNameValuePair("tc", "partido"));
		mParamPartido.add(new BasicNameValuePair("etapamundial", String
				.valueOf(etapa)));
		String mRespuestaPartido = null;
		JSONArray mResultadoPartido = null;
		DB db = new DB(activity);
		db.abrirConEscritura();

		/** Sincronizacion de partido **/
		try {
			Log.v("Sync", "Sincronizando partidos de hoy...");
			mRespuestaPartido = ClienteHttp
					.ejecutarHttpPost(URL, mParamPartido);
			mResultadoPartido = new JSONArray(mRespuestaPartido);
			for (int i = 0; i < mResultadoPartido.length(); i++) {
				String mRawFecha = mResultadoPartido.getJSONObject(i)
						.getString("Fecha");
				SimpleDateFormat formatoInicial = new SimpleDateFormat(
						"yyyy-MM-dd HH:mm:ss", Locale.US);
				formatoInicial.setTimeZone(TimeZone
						.getTimeZone("America/Caracas"));
				Date mFecha = formatoInicial.parse(mRawFecha);
				TimeZone tzUsuario = TimeZone.getDefault();
				SimpleDateFormat formatoFinal = new SimpleDateFormat(
						"yyyy-MM-dd HH:mm:ss", Locale.US);
				formatoFinal.setTimeZone(tzUsuario);
				String mFechaConvertida = formatoFinal.format(mFecha);
				db.insertarPartido(
						mResultadoPartido.getJSONObject(i).getInt("IDPartido"),
						mResultadoPartido.getJSONObject(i).getInt(
								"FK_EquipoLocal"),
						mResultadoPartido.getJSONObject(i).getInt(
								"FK_EquipoVisitante"),
						mResultadoPartido.getJSONObject(i).getInt("FK_Sede"),
						mFechaConvertida,
						mResultadoPartido.getJSONObject(i).getString(
								"NombreArbitro"),
						mResultadoPartido.getJSONObject(i).getInt("GolLocal"),
						mResultadoPartido.getJSONObject(i).getInt(
								"GolVisitante"),
						mResultadoPartido.getJSONObject(i).getInt(
								"GolLocalTiempoExtra"),
						mResultadoPartido.getJSONObject(i).getInt(
								"GolVisitanteTiempoExtra"),
						mResultadoPartido.getJSONObject(i).getInt(
								"GolLocalPenal"),
						mResultadoPartido.getJSONObject(i).getInt(
								"GolVisitantePenal"), mResultadoPartido
								.getJSONObject(i).getInt("FK_EtapaMundial"));
			}
			db.cerrar();
			return true;
		} catch (JSONException e) {
			Log.e("Sync", "Error al sincronizar partidos de hoy.");
			e.printStackTrace();
			db.cerrar();
			return false;
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
			db.cerrar();
			return false;
		}
	}

	public Boolean actualizarEquipo() {
		Log.v("Sync", "Iniciando sincronizacion de equipo");
		ArrayList<NameValuePair> mParamEquipo = new ArrayList<NameValuePair>();
		DB db = new DB(activity);
		db.abrirConEscritura();
		mParamEquipo.add(new BasicNameValuePair("tc", "equipo"));
		String mRespuestaEquipo = null;
		JSONArray mResultadoEquipo = null;

		/** Sincronizacion de equipo **/

		try {
			Log.v("Sync", "Sincronizando equipo...");
			mRespuestaEquipo = ClienteHttp.ejecutarHttpPost(URL, mParamEquipo);
			mResultadoEquipo = new JSONArray(mRespuestaEquipo);
			for (int i = 0; i < mResultadoEquipo.length(); i++) {
				// adding each child node to HashMap key => value

				db.insertarEquipo(
						mResultadoEquipo.getJSONObject(i).getInt("IDEquipo"),
						mResultadoEquipo.getJSONObject(i).getString("Nombre"),
						mResultadoEquipo.getJSONObject(i).getString("Bandera"),
						mResultadoEquipo.getJSONObject(i).getString("Escudo"),
						mResultadoEquipo.getJSONObject(i).getString("Grupo"),
						mResultadoEquipo.getJSONObject(i).getString(
								"Descripcion"),
						mResultadoEquipo.getJSONObject(i).getInt("Activo"),
						mResultadoEquipo.getJSONObject(i).getString("Color"),
						mResultadoEquipo.getJSONObject(i).getInt("Ganados"),
						mResultadoEquipo.getJSONObject(i).getInt("Empatados"),
						mResultadoEquipo.getJSONObject(i).getInt("Perdidos"),
						mResultadoEquipo.getJSONObject(i).getString("Camisa"),
						mResultadoEquipo.getJSONObject(i).getInt("Puntos"),
						mResultadoEquipo.getJSONObject(i).getInt("GolesFavor"),
						mResultadoEquipo.getJSONObject(i).getInt("GolesContra"),
						mResultadoEquipo.getJSONObject(i).getInt(
								"DiferenciaGoles"));

			}
			db.cerrar();
			Log.v("Sync", "Sincronizacion de equipo completa");
			return true;
		} catch (JSONException e) {
			Log.e("Sync", "Error al sincronizar equipo.");
			e.printStackTrace();
			return false;
		} catch (Exception e) {
			// TODO Auto-generated catch block
			Log.e("Sync", "Error al sincronizar equipo.");
			e.printStackTrace();
			return false;
		}
	}

	public Boolean actualizarEquiposHoy() {
		Log.v("Sync", "Iniciando sincronizacion de equipos modificados hoy");
		ArrayList<NameValuePair> mParamEquipo = new ArrayList<NameValuePair>();
		DB db = new DB(activity);
		db.abrirConEscritura();
		mParamEquipo.add(new BasicNameValuePair("tc", "equiposhoy"));
		String mRespuestaEquipo = null;
		JSONArray mResultadoEquipo = null;

		/** Sincronizacion de equipo **/

		try {
			Log.v("Sync", "Sincronizando equipo...");
			mRespuestaEquipo = ClienteHttp.ejecutarHttpPost(URL, mParamEquipo);
			mResultadoEquipo = new JSONArray(mRespuestaEquipo);
			for (int i = 0; i < mResultadoEquipo.length(); i++) {
				// adding each child node to HashMap key => value

				db.insertarEquipo(
						mResultadoEquipo.getJSONObject(i).getInt("IDEquipo"),
						mResultadoEquipo.getJSONObject(i).getString("Nombre"),
						mResultadoEquipo.getJSONObject(i).getString("Bandera"),
						mResultadoEquipo.getJSONObject(i).getString("Escudo"),
						mResultadoEquipo.getJSONObject(i).getString("Grupo"),
						mResultadoEquipo.getJSONObject(i).getString(
								"Descripcion"),
						mResultadoEquipo.getJSONObject(i).getInt("Activo"),
						mResultadoEquipo.getJSONObject(i).getString("Color"),
						mResultadoEquipo.getJSONObject(i).getInt("Ganados"),
						mResultadoEquipo.getJSONObject(i).getInt("Empatados"),
						mResultadoEquipo.getJSONObject(i).getInt("Perdidos"),
						mResultadoEquipo.getJSONObject(i).getString("Camisa"),
						mResultadoEquipo.getJSONObject(i).getInt("Puntos"),
						mResultadoEquipo.getJSONObject(i).getInt("GolesFavor"),
						mResultadoEquipo.getJSONObject(i).getInt("GolesContra"),
						mResultadoEquipo.getJSONObject(i).getInt(
								"DiferenciaGoles"));

			}
			db.cerrar();
			Log.v("Sync", "Sincronizacion de equipo completa");
			return true;
		} catch (JSONException e) {
			Log.e("Sync", "Error al sincronizar equipo.");
			e.printStackTrace();
			return false;
		} catch (Exception e) {
			// TODO Auto-generated catch block
			Log.e("Sync", "Error al sincronizar equipo.");
			e.printStackTrace();
			return false;
		}
	}

	public Boolean actualizarJugador() {
		ArrayList<NameValuePair> mParamJugador = new ArrayList<NameValuePair>();
		DB db = new DB(activity);
		db.abrirConEscritura();
		mParamJugador.add(new BasicNameValuePair("tc", "jugador"));
		String mRespuestaJugador = null;
		JSONArray mResultadoJugador = null;

		try {
			Log.v("Sync", "Sincronizando jugador...");
			mRespuestaJugador = ClienteHttp
					.ejecutarHttpPost(URL, mParamJugador);
			mResultadoJugador = new JSONArray(mRespuestaJugador);

			for (int i = 0; i < mResultadoJugador.length(); i++) {

				db.insertarJugador(
						mResultadoJugador.getJSONObject(i).getInt("IDJugador"),
						mResultadoJugador.getJSONObject(i).getString("Nombre"),
						mResultadoJugador.getJSONObject(i)
								.getString("Apellido"),
						mResultadoJugador.getJSONObject(i).getString(
								"Descripcion"),
						mResultadoJugador.getJSONObject(i).getString("Club"),
						mResultadoJugador.getJSONObject(i).getInt("Numero"),
						mResultadoJugador.getJSONObject(i)
								.getString("Posicion"),
						mResultadoJugador.getJSONObject(i).getString("Foto"),
						mResultadoJugador.getJSONObject(i).getInt("FK_Equipo"),
						mResultadoJugador.getJSONObject(i).getInt("Gol"),
						mResultadoJugador.getJSONObject(i).getInt("Asistencia"),
						mResultadoJugador.getJSONObject(i).getInt(
								"TarjetaAmarilla"), mResultadoJugador
								.getJSONObject(i).getInt("TarjetaRoja"),
						mResultadoJugador.getJSONObject(i).getInt("Capitan"),
						mResultadoJugador.getJSONObject(i).getInt("Lesionado"));

			}
			db.cerrar();
			return true;
		} catch (JSONException e) {
			Log.e("Sync", "Error al sincronizar jugador.");
			e.printStackTrace();
			return false;
		} catch (Exception e) {
			// TODO Auto-generated catch block
			Log.e("Sync", "Error al sincronizar jugador.");
			e.printStackTrace();
			return false;
		}
	}

	private class ActualizarSegundoPlano extends
			AsyncTask<String, Void, Boolean> {

		@Override
		protected void onPreExecute() {
			Toast.makeText(activity,
					activity.getString(R.string.inicio_actualizando),
					Toast.LENGTH_SHORT).show();
		}

		@Override
		protected Boolean doInBackground(String... equipos) {
			return actualizar();
		}

		@Override
		protected void onPostExecute(Boolean result) {
			if (result) {
				Toast.makeText(activity,
						activity.getString(R.string.inicio_actualizado),
						Toast.LENGTH_SHORT).show();
			} else {
				Toast.makeText(activity,
						activity.getString(R.string.inicio_sin_conexion),
						Toast.LENGTH_SHORT).show();
			}
		}
	}
}
